package com.school.sports.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.school.sports.entity.CertificateRecord;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 证书记录表 Mapper接口
 */
@Mapper
public interface CertificateRecordMapper extends BaseMapper<CertificateRecord> {

    /**
     * 分页查询证书记录（带用户名）
     * @param page 分页对象
     * @param record 查询条件
     * @return 分页结果
     */
    IPage<CertificateRecord> selectRecordPageWithUserName(Page<CertificateRecord> page, @Param("record") CertificateRecord record);

    /**
     * 根据用户ID查询证书列表
     * @param recipientUserId 获得者用户ID
     * @return 证书列表
     */
    List<CertificateRecord> selectByRecipientUserId(@Param("recipientUserId") Long recipientUserId);

    /**
     * 根据项目ID查询证书列表
     * @param projectId 项目ID
     * @return 证书列表
     */
    List<CertificateRecord> selectByProjectId(@Param("projectId") Long projectId);

    /**
     * 根据奖项ID查询证书列表
     * @param awardId 奖项ID
     * @return 证书列表
     */
    List<CertificateRecord> selectByAwardId(@Param("awardId") Long awardId);

    /**
     * 根据证书编号查询证书
     * @param certificateNo 证书编号
     * @return 证书记录
     */
    CertificateRecord selectByCertificateNo(@Param("certificateNo") String certificateNo);

    /**
     * 根据证书类型和用户ID查询证书
     * @param certificateType 证书类型
     * @param recipientUserId 获得者用户ID
     * @return 证书记录
     */
    CertificateRecord selectByTypeAndUserId(@Param("certificateType") String certificateType, @Param("recipientUserId") Long recipientUserId);

    /**
     * 查询指定日期范围内生成的证书
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 证书列表
     */
    List<CertificateRecord> selectByDateRange(@Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 统计各类证书数量
     * @return 统计结果
     */
    List<CertificateRecord> selectCertificateStatistics();
}